home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / oop / room.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-31  |  3.1 KB  |  115 lines

  1. //  Implementación de la clase habitación.
  2.  
  3. #include "room.hpp"
  4.  
  5. Room :: Room(char *text)    //  Constructor de la clase "room".
  6. {
  7.  num_obj=0;            //  Inicialmente 0 objetos.
  8.  norte=sur=este=oeste=NULL;    //  No apuntan a ningun sitio.
  9.  texto=text;            //  Copiamos el puntero simplemente.
  10.  }
  11.  
  12. void Room :: describe(void)    //  Función para escribir la descripción.
  13. {
  14.  cout << texto << endl;         //  Escribimos la descripción.
  15.  if(num_obj>0) {
  16.    cout << "Puedo ver: ";
  17.    for(int i=0; i<num_obj; i++) {
  18.      cosa[i]->es_nombre();    //  Dice todo lo que hay.
  19.      cout << ", ";
  20.      }
  21.    cout << endl;
  22.    }
  23.  }
  24.  
  25. objeto *Room :: coge_obj(char *que)
  26. {                //  Función para coger objetos de la sala.
  27.  int num=num_obj+1;        //  Más allá del último.
  28.  for(int i=0; i<num_obj; i++)
  29.    if(cosa[i] -> es_un(que))    //  Comprobamos 1 por 1 a ver si está.
  30.      num=i;
  31.  if(num>num_obj) return NULL;    //  Si no estaba el objeto.
  32.  else {
  33.    objeto *aux=cosa[num];    //  Guardamos en aux el objeto.
  34.    for(int i=num+1; i<num_obj; i++)
  35.      cosa[i-1]=cosa[i];        //  Reponemos el array de objetos.
  36.    --num_obj;            //  Ahora hay un objeto menos.
  37.    return aux;            //  Devolvemos el puntero al objeto.
  38.    }
  39.  }
  40.  
  41. void Room :: deja_obj(objeto *cual)
  42. {
  43.  if(num_obj<MAX_OBJ)        //  Hay que tener cuidado en no pasarse.
  44.    cosa[num_obj++]=cual;    //  Lo dejamos por ahí...
  45.  }
  46.  
  47. void Room :: conecta(Room *h1, int direc)
  48. {
  49.  switch(direc)
  50.   {
  51.    case R_NORTE:
  52.      if(norte==NULL) {
  53.        norte=h1;             //  Guardamos la dirección de la sala.
  54.        h1 -> conecta(this, R_SUR);   //  Conectamos la otra habitación por el sur.
  55.        }
  56.      break;
  57.    case R_ESTE:
  58.      if(este==NULL) {
  59.        este=h1;                 //  Guardamos la dirección de la sala.
  60.        h1 -> conecta(this, R_OESTE); //  Conectamos la otra habitación por el oeste.
  61.        }
  62.      break;
  63.    case R_SUR:
  64.      if(sur==NULL) {
  65.        sur=h1;                 //  Guardamos la dirección de la sala.
  66.        h1 -> conecta(this, R_NORTE); //  Conectamos la otra habitación por el norte.
  67.        }
  68.      break;
  69.    case R_OESTE:
  70.      if(oeste==NULL) {
  71.        oeste=h1;             //  Guardamos la dirección de la sala.
  72.        h1 -> conecta(this, R_ESTE);  //  Conectamos la otra habitación por el sur.
  73.        }
  74.      break;
  75.    }
  76.  }
  77.  
  78. void Room :: salidas(void)
  79. {                //  Escribe todas las salidas posibles.
  80.  cout << "Salidas: ";
  81.  if(norte!=NULL)
  82.    cout << "norte ";
  83.  if(este!=NULL)
  84.    cout << "este ";
  85.  if(sur!=NULL)
  86.    cout << "sur ";
  87.  if(oeste!=NULL)
  88.    cout << "oeste ";
  89.  cout << endl;
  90.  }
  91.  
  92. Room *Room :: ir_a(int direc)    //  Función para transladarse por las
  93. {                // habitaciones contiguas.
  94.  switch(direc)
  95.   {
  96.    case R_NORTE:
  97.      if(norte!=NULL)        //  Si se puede salir por ahí...
  98.        return norte;
  99.      break;
  100.    case R_ESTE:
  101.      if(este!=NULL)        //  Si se puede salir por ahí...
  102.        return este;
  103.      break;
  104.    case R_SUR:
  105.      if(sur!=NULL)        //  Si se puede salir por ahí...
  106.        return sur;
  107.      break;
  108.    case R_OESTE:
  109.      if(oeste!=NULL)        //  Si se puede salir por ahí...
  110.        return oeste;
  111.      break;
  112.    }
  113.  return NULL;            //  Si no está devuelve NULL.
  114.  }
  115.